package com.apobates.forum.toro.template.strategy;

import com.apobates.forum.toro.BatchQueryFace;
import com.apobates.forum.toro.template.TemplateStatements;
import java.util.Collection;
import java.util.List;
import java.util.Map;

/**
 * 值对象集合聚合策略
 * 适用于: TemplateStatements模式的构造策略
 * @param <E> 目标对象类型
 * @param <T> 基础对象类型
 *
 * @author xiaofanku@live.cn
 * @since 20220517
 */
@FunctionalInterface
public interface TemplateBatchStrategy<E,T> {
    /**
     * 策略的执行入口
     * @param targetObjClass 目标对象Class.可能为null
     * @param basicInsSet 基础对象集合实例.可能为空
     * @param statements 聚合属性语句
     * @param queries 聚合属性的查询
     * @return
     */
    Collection<E> apply(
            Class<E> targetObjClass,
            Collection<T> basicInsSet,
            List<TemplateStatements> statements,
            Map<String, BatchQueryFace> queries);
}
